extends Node

# 节点仓库：存储所有可用的节点
class_name NodeRepository

# 节点数据结构
class NodeData:
	var id: String
	var name: String
	var icon_path: String
	var node_type: String
	var cost: int
	var description: String
	var energy_cost: int  # 能量消耗
	
	func _init(p_id: String, p_name: String, p_icon_path: String, p_node_type: String, p_cost: int, p_description: String, p_energy_cost: int = 0):
		id = p_id
		name = p_name
		icon_path = p_icon_path
		node_type = p_node_type
		cost = p_cost
		description = p_description
		energy_cost = p_energy_cost

# 存储所有节点的字典
var all_nodes: Dictionary = {}

func _ready() -> void:
	# 添加到分组，便于其他脚本查找
	add_to_group("node_repository")
	# 初始化仓库，添加默认节点
	_initialize_default_nodes()

func _initialize_default_nodes() -> void:
	# 添加基础子弹节点
	var basic_bullet = NodeData.new(
		"basic_bullet",
		"基础子弹",
		"res://imageico/bullet_effective.png",
		"attack",
		100,  # 基础价格
		"基础攻击节点，发射普通子弹",
		2  # 能量消耗
	)
	all_nodes["basic_bullet"] = basic_bullet
	
	# 添加重型子弹修饰节点
	var heavy_bullet = NodeData.new(
		"heavy_bullet",
		"重型子弹",
		"res://imageico/Heavy_bullets_effective.png",
		"modifier",
		150,  # 价格
		"重型子弹修饰节点，增加伤害和暴击概率，但降低速度",
		10  # 能量消耗
	)
	all_nodes["heavy_bullet"] = heavy_bullet
	
	print("节点仓库初始化完成，当前节点数量：", all_nodes.size())

# 获取所有节点
func get_all_nodes() -> Dictionary:
	return all_nodes

# 根据ID获取特定节点
func get_node_by_id(node_id: String) -> NodeData:
	if all_nodes.has(node_id):
		return all_nodes[node_id]
	return null

# 根据类型获取节点
func get_nodes_by_type(node_type: String) -> Array:
	var result: Array = []
	for node in all_nodes.values():
		if node.node_type == node_type:
			result.append(node)
	return result

# 随机获取指定数量的节点（用于商店）
func get_random_nodes(count: int, node_type: String = "") -> Array:
	var available_nodes: Array
	if node_type.is_empty():
		available_nodes = all_nodes.values()
	else:
		available_nodes = get_nodes_by_type(node_type)
	
	var result: Array = []
	var temp_nodes = available_nodes.duplicate()
	
	# 随机选择指定数量的节点
	for i in range(min(count, temp_nodes.size())):
		var random_index = randi() % temp_nodes.size()
		result.append(temp_nodes[random_index])
		temp_nodes.remove_at(random_index)
	
	return result

# 添加新节点到仓库
func add_node(node_data: NodeData) -> void:
	all_nodes[node_data.id] = node_data
	print("添加新节点到仓库：", node_data.name)

# 从仓库移除节点
func remove_node(node_id: String) -> bool:
	if all_nodes.has(node_id):
		all_nodes.erase(node_id)
		print("从仓库移除节点：", node_id)
		return true
	return false

# 获取仓库统计信息
func get_repository_stats() -> Dictionary:
	var stats = {
		"total_nodes": all_nodes.size(),
		"attack_nodes": get_nodes_by_type("attack").size(),
		"defense_nodes": get_nodes_by_type("defense").size(),
		"utility_nodes": get_nodes_by_type("utility").size()
	}
	return stats
